﻿using System;
using System.Collections.Generic;

namespace System.Erp.Runtime
{
    /// <summary>
    /// 提供一种接口，用于描述零件的源
    /// </summary>
    /// <remarks>
    /// <para>我们可以认为一个组装件是一个零件的源，他可能内部提供了很多的零件，其中的一个类也可以提供多个零件。</para>
    /// <para>对应的，你可以认为一个项目配置文件也是一个零件的源。任何一个零件的源都能够用一个指针描述。</para>
    /// </remarks>
    public interface IPartSource
    {
        /// <summary>
        /// 返回此源下的所有子零件源
        /// </summary>
        /// <returns>返回所有可用的零件源对象的枚举器</returns>
        IEnumerable<IPartSource> GetSubPartSources();

        /// <summary>
        /// 返回之间的零件集合
        /// </summary>
        /// <returns>所有可用的零件集合的枚举器.</returns>
        IEnumerable<object> GetParts();
    }

    //TODO:
    //1、引入一个 源，可以展开看见子源
    //2、类上的众多Attribute如何分解呢？
    //3、某个源或零件如何使用 System.Reflection.CustomAttributeData 表示；
    //4、要通过 System.Reflection.CustomAttributeData 再恢复出 零件对象。
    //5、多个ServiceAttribute其实对应到一个功能点。
}
